#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node
{
    int elem;
    struct node *next;
};
typedef struct node INTLIST;

#define Max_Size 114514
/*算法流程：首先寻找链表中的最大元素所在节点，使用指针q定位
确定q之后再使用指针r定位其直接前驱元素，进行删除操作
结束后按惯例返回表头指针。
算法中存在两个串联的循环体，分别用于q和r的定位。
最坏情况下，所有元素先后各遍历一次，时间复杂度为O(n)。*/
INTLIST *practice2(INTLIST *list)
{
    INTLIST *p,*q=NULL,*r;
    int max=-19377247;
    for(p=list;p!=NULL;p=p->next)
    {
        if(p->elem>max)
        {
            max=p->elem;
            q=p;
        }
    }
    if(q==list) list=q->next;
    else
    {
        for(r=list;r->next!=q&&r->next!=NULL;r=r->next);
        r->next=q->next;
        free(q);
    }
    return list;
}

INTLIST *addelem(INTLIST *list,int a)
{
    INTLIST *p,*q;
    p=(INTLIST*)malloc(sizeof(INTLIST));
    p->elem=a;
    p->next=list;
    return p;
}

int main()
{
    
    char line[Max_Size];
    while(gets(line)!=NULL)
    {
        int temp=0,a[Max_Size]={0},i=-1,j=0;
        INTLIST *list=NULL,*p;
        for(j;j!=strlen(line);++j)
        {
            if(line[j]>='0'&&line[j]<='9')
            {
                temp=temp*10+(line[j]-'0');
            }
            else
            {
                a[++i]=temp;
                temp=0;
            }
        }
        if(line[j-1]>='0'&&line[j-1]<='9')
        {
            a[++i]=temp;
            temp=0;
        }
        for(int j=i;j>=0;--j)
        {
            list=addelem(list,a[j]);
        }
        list=practice2(list);
        for(p=list;p!=NULL;p=p->next) printf("%d ",p->elem);
        printf("\n");
    }
    
    system("pause");
    return 0;
}